#include "STC8G_H_GPIO.h"

#include "STC8G_H_Delay.h"
#include "Motor.h"
/**********************************
8拍励磁顺序
     1  2  3  4  5  6  7  8
5红  +  +  +  +  +  +  +  +
4橙  -  -                 -
3黄     -  -  -
2粉           -  -  -
1蓝                 -  -  -

			 1    2    3    4
P2 -> P20, P21, P22, P23
			 A    B    C    D

**********************************/
u8 phase_ccw[8] = {L4, L4|L3, L3, L3|L2, L2, L2|L1, L1, L1|L4};  // 逆时针转，电机导通顺序 D-DC-C-CB-B-BA-A-AD
u8 phase_cw[8]  = {L1|L4, L1, L2|L1, L2, L3|L2, L3, L4|L3, L4};  // 顺时针转，电机导通顺序 A-AB-B-

u8 delay_value = 1; // [0, 10]
char step = 1;

static void GPIO_config(void) {
  GPIO_InitTypeDef	GPIO_InitStructure;		//结构定义

  GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;		//指定要初始化的IO,
  GPIO_InitStructure.Mode = GPIO_OUT_PP;	//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
  GPIO_Inilize(GPIO_P2, &GPIO_InitStructure);//初始化
}

// 初始化
void motor_init(){
    GPIO_config();

}
// 顺时针旋转
void Motor_CW(){
  u8 i;
  for (i = 0; i < BEATS_COUNT; i++) {
    MOTORS = ~phase_cw[i];
    delay_ms(delay_value);
  }
}
// 逆时针旋转
void Motor_CCW(){
  u8 i;
  for (i = 0; i < BEATS_COUNT; i++) {
    MOTORS = ~phase_ccw[i];
    delay_ms(delay_value);
  }
}
// 停车
void Motor_Stop(){
  MOTORS = 0x0F;
}
// 旋转角度
void Motor_turn(float angle){
  int i;

  int count = (angle / CIRCLE);

  count = ABS(count);

  if(angle > 0) {
    // 顺时针
    for(i = 0; i < count; i++) {
      Motor_CW();
    }

  } else {
    // 逆时针
    for(i = 0; i < count; i++) {
      Motor_CCW();
    }

  }

  Motor_Stop();

}